#ifndef __REMOTECONTROL_H__
#define __REMOTECONTROL_H__
#include <main.h>
/*************** Location of the channels bar ***************/
#define RC_CH_VALUE_MIN         		((uint16_t)364)
#define RC_CH_VALUE_OFFSET      		((uint16_t)1024)
#define RC_CH_VALUE_MAX         		((uint16_t)1684)
/****************** RC Switch Definition ********************/
#define RC_SW_UP                		((uint16_t)1)
#define RC_SW_MID               		((uint16_t)3)
#define RC_SW_DOWN              		((uint16_t)2)
/*************** RC Switch position check *******************/
#define switch_is_down(s)       		(s == RC_SW_DOWN)
#define switch_is_mid(s)        		(s == RC_SW_MID)
#define switch_is_up(s)         		(s == RC_SW_UP)
/***************** RC keyboard definition ******************/
#define KEY_PRESSED_OFFSET_W            ((uint16_t)1 << 0)
#define KEY_PRESSED_OFFSET_S            ((uint16_t)1 << 1)
#define KEY_PRESSED_OFFSET_A            ((uint16_t)1 << 2)
#define KEY_PRESSED_OFFSET_D            ((uint16_t)1 << 3)
#define KEY_PRESSED_OFFSET_SHIFT        ((uint16_t)1 << 4)
#define KEY_PRESSED_OFFSET_CTRL         ((uint16_t)1 << 5)
#define KEY_PRESSED_OFFSET_Q            ((uint16_t)1 << 6)
#define KEY_PRESSED_OFFSET_E            ((uint16_t)1 << 7)
#define KEY_PRESSED_OFFSET_R            ((uint16_t)1 << 8)
#define KEY_PRESSED_OFFSET_F            ((uint16_t)1 << 9)
#define KEY_PRESSED_OFFSET_G            ((uint16_t)1 << 10)
#define KEY_PRESSED_OFFSET_Z            ((uint16_t)1 << 11)
#define KEY_PRESSED_OFFSET_X            ((uint16_t)1 << 12)
#define KEY_PRESSED_OFFSET_C            ((uint16_t)1 << 13)
#define KEY_PRESSED_OFFSET_V            ((uint16_t)1 << 14)
#define KEY_PRESSED_OFFSET_B            ((uint16_t)1 << 15)

/***************************** Data Structure *****************************/
typedef struct
{
    struct
    {
        uint16_t ch[5];
        uint8_t  s[2];
    } rc;
    struct
    {
        int16_t x;
        int16_t y;
        int16_t z;
        uint8_t pressLeft;
        uint8_t pressRight;
    } mouse;
    union
	{
        uint16_t v;
        struct
        {
            uint16_t W:1;
            uint16_t S:1;
            uint16_t A:1;
            uint16_t D:1;
            uint16_t SHIFT:1;
            uint16_t CTRL:1;
            uint16_t Q:1;
            uint16_t E:1;
            uint16_t R:1;
            uint16_t F:1;
            uint16_t G:1;
            uint16_t Z:1;
            uint16_t X:1;
            uint16_t C:1;
            uint16_t V:1;
            uint16_t B:1;
        } bit;
	}key;
} remoteCtrl_t;

void DbusToRC(volatile const uint8_t *dbusBuf, \
              remoteCtrl_t *remoteControl);

#endif
